
// Electron 入口
const { app, BrowserWindow, Menu ,ipcMain ,globalShortcut} = require('electron')
const path = require('path')

function createWindow() {
  // 创建浏览器窗口
  const mainWindow = new BrowserWindow({
    width: 200,
    height: 200,
    icon: path.join(__dirname, '../public/logo.ico'),
    webPreferences: {
      // 书写渲染进程中的配置
      nodeIntegration: true, // 目的是为了vue文件中可以引入node和electron相关的API
      contextIsolation: false, // 可以使用require方法
      enableRemoteModule: true, // 可以使用remote方法
    },
    frame: false,
    transparent: true,
    // 无标题时，在mac内，窗口将一直拥有位于左上的标准窗口控制器 (“traffic lights”)
    titleBarStyle: 'hidden',
  })
  // 开启事件监听
  eventListening(ipcMain,mainWindow)
  // 关闭菜单栏
  mainWindow.setMenu(null)
  let env = 'pro'
  // 配置热更新
  if (env == 'pro') {
    const elePath = path.join(__dirname, '../node_modules/electron')
    require('electron-reload')('../', {
      electron: require(elePath),
    })
    // 热更新监听窗口
    mainWindow.loadURL('http://localhost:8888')
  } else {
    // 生产环境中要加载文件，打包的版本
    // Menu.setApplicationMenu(null)
    // 加载 index.html
    mainWindow.loadFile(path.resolve(__dirname, '../dist/index.html')) // 新增
  }
}

// Electron 结束初始化 和创建浏览器窗口的时候调用
app.whenReady().then(() => {
  createWindow()
  app.on('activate', function () {
    // 通常在 macOS 上，当点击 dock 中的应用程序图标时，如果没有其他
    // 打开的窗口，那么程序会重新创建一个窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此，通常对程序和它们在
// 任务栏上的图标来说，应当保持活跃状态，直到用户使用 Cmd + Q 退出。
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

// 所有事件监听器
function eventListening(ipcMain,mainWindow){
  // 监听窗口置顶事件
  ipcMain.on('setAppTop', () => {
    mainWindow.setAlwaysOnTop(!mainWindow.isAlwaysOnTop());
  })
  // 监听窗口关闭事件
  ipcMain.on('closeApp', () => {
      mainWindow.close()
  })
  // 监听 ctrl+F12 打开开发工具
  globalShortcut.register("ctrl+F12", () => {
      mainWindow.webContents.openDevTools()
  })
}